<?php

declare(strict_types=1);

namespace app\admin\middleware;

use app\admin\model\MenuModel;
use app\admin\model\RoleModel;
use app\utils\ResData;

/**
 * 权限检查中间件
 */
class CheckPower
{
    /**
     * 处理请求中间件，检查是否有权限
     */
    public function handle($request, \Closure $next)
    {
        $_admin = session('admin');
        if ($_admin && !empty($_admin)) {
            // 判断用户是否有权限
            $role = RoleModel::where('id', $_admin['role_id'])->find();
            if (!$role) {
                $this->request_error('对不起，您没有权限');
            }

            $powers = json_decode($role->powers);

            // 当前访问菜单
            $controller = strtolower($request->controller());
            $method = strtolower($request->action());
            // dump($controller, $method);

            $res = MenuModel::where('controller', $controller)->where('method', $method)->find();
            if (!$res) {
                $this->request_error('对不起，您访问的功能不存在');
            }

            if ($res->status == 0) {
                $this->request_error('对不起，该功能已禁止使用');
            }

            if (!in_array($res->id, $powers)) {
                $this->request_error('对不起，您没有权限');
            }
        }

        return $next($request);
    }

    private function request_error(string $msg)
    {
        if (request()->isAjax()) {
            exit(json_encode(ResData::res(401, '对不起，您没有权限')));
        } else {
            exit($msg);
        }
    }
}